//多线程实现方式3：创建Callable对象
/*
 * 多线程第三种方式
 * 特点：可以获取搭配多线程运行的结果
 * 
 * 1.创建一个Callable实现Callable接口
 * 2.重写call（是有返回值的，表示多线程运行结果
 * 
 * 3.创建MyCallable的对象（表示多线程要执行的任务）
 * 4.创建Futuretask(Future是接口不能创建对象，所以用他的实现类）的对象（作用管理多线程运行的结果)
 * 5.创建Thread类的对象，并启动（表示线程）
 */

package ThreadDemo3;

import java.util.concurrent.FutureTask;

public class ThreadDemo {
    public static void main(String[] args) {
        // 1.创建创建MyCallable的对象（表示多线程要执行的任务）
        MyCallable mc = new MyCallable();

        // 2.创建Futuretask的对象（作用管理线程运行的结果）
        FutureTask<Integer> ft = new FutureTask<>(mc);

        // 3.创建线程对象
        Thread t1 = new Thread(ft);

        t1.start();

        // 获取多线程的结果
        // get()这个方法可能会报出异常，所以要写try catch语句来接收这个异常
        Integer result;
        try {
            result = ft.get();
            System.out.println(result);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}
